security_check();
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
header("Location: ../logout.php?auto=1");
die();
}
// Check access
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
$valid = isset($_POST["valid"]) ? $_POST["valid"] : 'no';
$id_info=isset($_POST['id_info']) ? $_POST['id_info'] : (isset($_GET['id_info']) ? $_GET['id_info'] : '');
$mode_auto=isset($_POST['mode_auto']) ? $_POST['mode_auto'] : (isset($_GET['mode_auto']) ? $_GET['mode_auto'] : 'n');
if((isset($_POST['mode']))&&($_POST['mode']=='suppr_assoc_doublon')) {
check_token();
$msg="";
$suppr_assoc_doublon=isset($_POST['suppr_assoc_doublon']) ? $_POST['suppr_assoc_doublon'] : (isset($_GET['suppr_assoc_doublon']) ? $_GET['suppr_assoc_doublon'] : array());
$cpt_suppr=0;
for($loop=0;$loop
";
}
}
if($cpt_suppr>0) {
$msg.=$cpt_suppr." association(s) supprimée(s).
";
}
$mode="";
}
$style_specifique[] = "lib/DHTMLcalendar/calendarstyle";
$javascript_specifique[] = "lib/DHTMLcalendar/calendar";
$javascript_specifique[] = "lib/DHTMLcalendar/lang/calendar-fr";
$javascript_specifique[] = "lib/DHTMLcalendar/calendar-setup";
//==================================
// header
$titre_page = "Vérification/nettoyage des tables de la base de données GEPI";
require_once("../lib/header.inc.php");
//==================================
//======================================================
// Fonctions à utiliser... juste stockées ici pour le moment.
function get_tab_utilisateurs_responsables_fantomes() {
$retour=array();
$sql="select login from utilisateurs where statut='responsable' and login not in (select login from resp_pers);";
$res=mysqli_query($GLOBALS["mysqli"], $sq);
if(mysqli_num_rows($res)>0) {
while($lig=mysqli_fetch_object($res)) {
$retour[]=$lig->login;
}
}
return $retour;
}
function menage_utilisateurs_responsables() {
$sql="delete from utilisateurs where statut='responsable' and login not in (select login from resp_pers);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$res) {
return false;
}
else {
return true;
}
}
function desactivation_utilisateurs_responsables_sans_eleve() {
$sql="update utilisateurs set statut='inactif' where statut='responsable' and login not in (select login from resp_pers);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$res) {
return false;
}
else {
return true;
}
}
function desactivation_utilisateurs_responsables_sans_eleve_scolarise() {
$sql="update utilisateurs set statut='inactif' where statut='responsable' and login in (SELECT rp.login FROM resp_pers rp, responsables2 r, eleves e WHERE rp.pers_id=r.pers_id AND r.ele_id=e.ele_id AND e.login NOT IN (SELECT login FROM j_eleves_classes));";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$res) {
return false;
}
else {
return true;
}
}
function get_tab_utilisateurs_eleves_fantomes() {
$retour=array();
$sql="select login from utilisateurs where statut='eleve' and login not in (select login from eleves);";
$res=mysqli_query($GLOBALS["mysqli"], $sq);
if(mysqli_num_rows($res)>0) {
while($lig=mysqli_fetch_object($res)) {
$retour[]=$lig->login;
}
}
return $retour;
}
function menage_utilisateurs_eleves() {
$sql="delete from utilisateurs where statut='eleve' and login not in (select login from eleves);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$res) {
return false;
}
else {
return true;
}
}
//======================================================
//$total_etapes = 8;
$total_etapes = 18;
$duree = 8;
if (!isset($_GET['cpt'])) {
$cpt = 0;
} else {
$cpt = $_GET['cpt'];
}
$maj=isset($_POST['maj']) ? $_POST['maj'] : (isset($_GET['maj']) ? $_GET['maj'] : NULL);
$stop=isset($_POST['stop']) ? $_POST['stop'] : (isset($_GET['stop']) ? $_GET['stop'] :'n');
//debug_var();
if((isset($maj))||(isset($_REQUEST['action']))) {
check_token();
}
/*
//if (($_POST['maj'])=="9") {
if ($maj=="9") {
echo "
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables
\n"; } */ //debug_var(); function init_time() { global $TPSDEB,$TPSCOUR; list ($usec,$sec)=explode(" ",microtime()); $TPSDEB=$sec; $TPSCOUR=0; } function current_time() { global $TPSDEB,$TPSCOUR; list ($usec,$sec)=explode(" ",microtime()); $TPSFIN=$sec; if (round($TPSFIN-$TPSDEB,1)>=$TPSCOUR+1) //une seconde de plus { $TPSCOUR=round($TPSFIN-$TPSDEB,1); flush(); } } function get_id_infos_action_nettoyage() { global $id_info; if($id_info!='') { return $id_info; } else { return new_id_infos_action_nettoyage(); } } function new_id_infos_action_nettoyage() { //$id_info=""; $titre="Nettoyage des tables : ".strftime("%d/%m/%Y à %H:%M:%S"); $texte="Nettoyage des tables...Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "La table j_classes_matieres_professeurs n'existe plus et ne peut donc pas être nettoyée. Cette étape est remplacée plus loin par un nettoyage des tables de gestion des groupes.
\n"; echo "\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="4"))||(isset($_GET['maj']) and (($_GET['maj'])=="4"))) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Cette table n'est plus utilisée. Cette étape a été remplacée plus loin par une étape de nettoyage des attributions d'élèves aux groupes...
\n"; echo "\n"; echo script_suite_submit(); //} } else if ((isset($_POST['maj']) and (($_POST['maj'])=="6"))||(isset($_GET['maj']) and (($_GET['maj'])=="6"))) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage en cours Progression ".$percent."% | |
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage en cours Progression ".$percent."% | |
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour à Outils de gestion | Retour à Vérification/nettoyage des tables
\n"; $temoin_aberrations_groupes=0; $table=array('j_signalement', 'j_groupes_classes','j_groupes_matieres','j_groupes_professeurs','j_eleves_groupes', 'j_groupes_visibilite', 'acces_cdt_groupes'); if(!isset($_POST['nettoyage_grp'])) { $texte_info_action="Un ou des groupes existent sans être associés à aucune classe.
C'est une anomalie.
En voici la liste :
\n";
while($ligne=mysqli_fetch_object($res_grp2)) {
$texte_info_action.="Suppression du groupe n°$ligne->id : $ligne->name ($ligne->description) : ";
//$sql="DELETE from groupes WHERE id='$ligne->id';";
//echo "$sql
";
//$menage=mysql_query($sql);
$menage=delete_group($ligne->id);
if($menage) {
$texte_info_action.="SUCCES";
}
else {
$texte_info_action.="ECHEC";
}
$texte_info_action.="
\n";
}
echo $texte_info_action;
update_infos_action_nettoyage($id_info, $texte_info_action);
}
$sql="select g.* from groupes g left join j_groupes_matieres jgm on jgm.id_groupe=g.id where jgm.id_groupe is NULL;";
$res_grp2=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_grp2)>0){
$texte_info_action="
Un ou des groupes existent sans être associés à aucune matière.
C'est une anomalie.
En voici la liste :
\n";
while($ligne=mysqli_fetch_object($res_grp2)) {
$texte_info_action.="Suppression du groupe n°$ligne->id : $ligne->name ($ligne->description) : ";
//$sql="DELETE from groupes WHERE id='$ligne->id';";
//echo "$sql
";
//$menage=mysql_query($sql);
$menage=delete_group($ligne->id);
if($menage) {
$texte_info_action.="SUCCES";
}
else {
$texte_info_action.="ECHEC";
}
$texte_info_action.="
\n";
}
echo $texte_info_action;
update_infos_action_nettoyage($id_info, $texte_info_action);
}
// On va supprimer des tables 'j_signalement', 'j_groupes_classes','j_groupes_matieres','j_groupes_professeurs','j_eleves_groupes', 'j_groupes_visibilite', 'acces_cdt_groupes', les groupes qui ne sont pas dans la table 'groupes'
for($i=0;$i
On parcourt la table '".$table[$i]."'.
\n"; while($ligne=mysqli_fetch_array($res_grp1)){ $sql="SELECT 1=1 FROM groupes WHERE id='".$ligne[0]."'"; //echo "$sqlRecherche des élèves affectés dans des groupes sur des périodes non associées à leur classe.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // BOUCLE sur les classes $sql="SELECT id FROM classes ORDER BY classe;"; //echo "$sqlAucune classe n'est enregistrée dans la table 'classes'.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } else { $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { $texte_info_action="Classe ".get_class_from_id($lig->id)."
\n";
$sql="SELECT jeg.* FROM j_eleves_groupes jeg, j_groupes_classes jgc WHERE jgc.id_classe='$lig->id' AND jeg.id_groupe=jgc.id_groupe AND jeg.periode NOT IN (SELECT num_periode FROM periodes WHERE id_classe='$lig->id');";
//echo "$sql
\n";
$res2=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res2)>0) {
$nb_suppr=0;
$texte_info_action.=mysqli_num_rows($res2)." inscriptions en erreur d'élèves dans 'j_eleves_groupes' pour une période non associée à la classe ".get_class_from_id($lig->id)." : ";
while($lig2=mysqli_fetch_object($res2)) {
$sql="SELECT * FROM matieres_notes WHERE login='$lig2->login' AND id_groupe='$lig2->id_groupe' AND periode='$lig2->periode';";
//echo "$sql
\n";
$res_liste_notes=mysqli_query($GLOBALS["mysqli"], $sql);
$sql="SELECT * FROM matieres_appreciations WHERE login='$lig2->login' AND id_groupe='$lig2->id_groupe' AND periode='$lig2->periode';";
//echo "$sql
\n";
$res_liste_appreciations=mysqli_query($GLOBALS["mysqli"], $sql);
if((mysqli_num_rows($res_liste_notes)==0)&&(mysqli_num_rows($res_liste_appreciations)==0)){
$sql="DELETE FROM j_eleves_groupes WHERE id_groupe='$lig2->id_groupe' AND login='$lig2->login' AND periode='$lig2->periode';";
//echo "$sql
\n";
$resultat_nettoyage_initial=mysqli_query($GLOBALS["mysqli"], $sql);
if($resultat_nettoyage_initial) {$nb_suppr++;}
}
else {
$texte_info_action.="
\n";
$texte_info_action.="Bulletins non vides pour $lig2->login sur la période $lig2->periode.
\n";
}
//echo "$lig2->id_groupe $lig2->login $lig2->periode
\n";
}
$texte_info_action.="$nb_suppr suppressions.
\n";
}
echo $texte_info_action;
update_infos_action_nettoyage($id_info, $texte_info_action);
}
}
}
// Elèves dans des groupes pour lesquels l'association classe/groupe n'existe pas dans j_groupes_classes pour leurs classes
//===========
// A FAIRE
//===========
echo "
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Toutes les grilles sont associées à des utilisateurs existants.
\n"; } else { $texte_info_action.="$nb_scories grille(s) ne sont associées à aucun utilisateurs existants : "; $sql="DELETE FROM modeles_grilles_pdf WHERE login NOT IN (SELECT login FROM utilisateurs);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="
\n"; } $sql="SELECT 1=1 FROM modeles_grilles_pdf WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf_valeurs);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="Toutes les grilles sont associées à des paramètres de grilles.
\n"; } else { $texte_info_action.="$nb_scories grille(s) ne sont associées à aucun paramètre de grille : "; $sql="DELETE FROM modeles_grilles_pdf WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf_valeurs);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="
\n"; } $sql="SELECT 1=1 FROM modeles_grilles_pdf_valeurs WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="Tous les paramètres de grilles sont associés à des grilles existantes.
\n"; } else { $texte_info_action.="$nb_scories paramètres de grilles ne sont associées à aucune grille : "; $sql="DELETE FROM modeles_grilles_pdf_valeurs WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "\n"; echo script_suite_submit(); /* echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Toutes les adresses sont associées à des responsables.
\n"; } else { $texte_info_action.="$nb_scories adresses ne sont pas associées à des responsables : "; $sql="delete from resp_adr where adr_id not in (select distinct adr_id from resp_pers);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "\n"; echo script_suite_submit(); /* echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Aucun engagement n'est saisi.
\n"; } else { while($lig=mysqli_fetch_object($res)) { $sql="SELECT * FROM eleves WHERE login='".$lig->login."';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)>0) { if($lig->id_type=='id_classe') { $sql="SELECT * FROM j_eleves_classes WHERE login='".$lig->login."' AND id_classe='".$lig->valeur."';"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res3)==0) { $lig2=mysqli_fetch_object($res2); $texte_info_action.="Suppression d'un engagement (".$tab_engagements['id_engagement'][$lig->id_engagement]['nom'].") en classe de ".get_nom_classe($lig->valeur)." pour ".$lig2->prenom." ".$lig2->nom." : "; $sql="DELETE FROM engagements_user WHERE id='".$lig->id."';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if(!$del) { $texte_info_action.="ERREUR"; } else { $texte_info_action.="SUCCES"; } $texte_info_action.=".Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Aucune scorie trouvée.
\n"; } else { $texte_info_action.="Suppression de ".mysqli_num_rows($res)." enregistrement(s) dans la table 'd_dates_evenements_classes' : ";
$sql="DELETE FROM d_dates_evenements_classes WHERE id_classe NOT IN (SELECT id FROM classes);";
//echo "$sql
";
$del=mysqli_query($GLOBALS['mysqli'], $sql);
if(!$del) {
$texte_info_action.="ERREUR";
}
else {
$texte_info_action.="SUCCES";
}
$texte_info_action.=".
\n";
}
echo $texte_info_action;
update_infos_action_nettoyage($id_info, $texte_info_action);
//=====================================
echo "
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; if (isset($_POST['is_confirmed']) and $_POST['is_confirmed'] == "yes") { $liste_tab=array("classes","id","`id` smallint(6) unsigned NOT NULL auto_increment", "cn_cahier_notes","id_cahier_notes","`id_cahier_notes` int(11) NOT NULL auto_increment", "cn_conteneurs","id","`id` int(11) NOT NULL auto_increment", "cn_devoirs","id","`id` int(11) NOT NULL auto_increment", "commentaires_types","id","`id` INT( 11 ) NOT NULL AUTO_INCREMENT", "ct_devoirs_entry","id_ct","`id_ct` int(11) NOT NULL auto_increment", "ct_documents","id","`id` int(11) NOT NULL auto_increment", "ct_entry","id_ct","`id_ct` int(11) NOT NULL auto_increment", "ct_types_documents","id_type","`id_type` bigint(21) NOT NULL auto_increment", "messages","id","`id` int(11) NOT NULL auto_increment", "suivi_eleve_cpe","id_suivi_eleve_cpe","`id_suivi_eleve_cpe` int(11) NOT NULL auto_increment", "absences_eleves","id_absence_eleve","`id_absence_eleve` int(11) NOT NULL auto_increment", "edt_creneaux","id_definie_periode","`id_definie_periode` int(11) NOT NULL auto_increment", "absences_motifs","id_motif_absence","`id_motif_absence` int(11) NOT NULL auto_increment", "groupes","id","`id` int(11) NOT NULL auto_increment", "miseajour","id_miseajour","`id_miseajour` int(11) NOT NULL auto_increment", "absences_actions","id_absence_action","`id_absence_action` int(11) NOT NULL auto_increment", "edt_classes","id_edt_classe","`id_edt_classe` int(11) NOT NULL auto_increment", "model_bulletin","id_model_bulletin","`id_model_bulletin` int(11) NOT NULL auto_increment", "edt_dates_special","id_edt_date_special","`id_edt_date_special` int(11) NOT NULL auto_increment", "edt_semaines","id_edt_semaine","`id_edt_semaine` int(11) NOT NULL auto_increment", "etiquettes_formats","id_etiquette_format","`id_etiquette_format` int(11) NOT NULL auto_increment", "horaires_etablissement","id_horaire_etablissement","`id_horaire_etablissement` int(11) NOT NULL auto_increment", "lettres_cadres","id_lettre_cadre","`id_lettre_cadre` int(11) NOT NULL auto_increment", "lettres_suivis","id_lettre_suivi","`id_lettre_suivi` int(11) NOT NULL auto_increment", "lettres_tcs","id_lettre_tc","`id_lettre_tc` int(11) NOT NULL auto_increment", "lettres_types","id_lettre_type","`id_lettre_type` int(11) NOT NULL auto_increment", "vs_alerts_eleves","id_alert_eleve","`id_alert_eleve` int(11) NOT NULL auto_increment", "vs_alerts_groupes","id_alert_groupe","`id_alert_groupe` int(11) NOT NULL auto_increment", "vs_alerts_types","id_alert_type","`id_alert_type` int(11) NOT NULL auto_increment" ); $temoin_poursuivre_corrections='yes'; $corrections = array(); echo "\n";
for($i=0;$i
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0){
unset($lig);
$lig=mysqli_fetch_array($res);
$temoin="no";
//echo "
\n";
for($j=0;$j
Aucune table n'a besoin de corrections.
\n"; echo "Aucune table n'a besoin de corrections.
\n"; } else { // On procède aux corrections foreach($corrections as $correct_table) { echo "Aucune correction n'a été tentée. Des problèmes d'intégrité des données ont été détectés, la procédure ne peut pas continuer. Vous devez corriger les problèmes à la main (recherchez les entrées ayant la valeur '0' pour le champ supposé auto-incrémenté) et relancer cette procédure.
\n"; } } else { echo "La procédure suivante vérifie l'intégrité de certains champs de la base de données et tente de corriger les erreurs rencontrées si elles existent.
\n"; echo "Ce script ne doit être exécuté que si vous avez restauré sur votre Gepi une sauvegarde réalisée avec une version 1.4.4 en utilisant la méthode 'mysqldump' (et non la méthode classique de sauvegarde Gepi sans mysqldump).
\n"; echo "La procédure débute par une série de tests sur les champs devant être auto-incrémentés. Si aucun problème n'est rencontré, aucune modification n'est faite. Si certains champs n'ont pas l'option d'auto-incrémentation, des tests sont faits sur l'intégrité des données. Si aucun problème d'intégrité des données n'a été détecté, la procédure corrigera les champs nécessaires. Sinon, un message d'erreur sera affiché et aucune modification ne sera effectuée sur la base de données.
\n"; echo "Si vous êtes sûr de vouloir continuer, cliquez sur le bouton ci-dessous.
\n"; echo "\n"; } } elseif ((isset($_POST['action']) AND $_POST['action'] == 'check_jec_jep_point')||((isset($_POST['maj']))&&($_POST['maj']=='check_jec_jep_point'))||((isset($_GET['maj']))&&($_GET['maj']=='check_jec_jep_point'))) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; $gepi_prof_suivi=getSettingValue("gepi_prof_suivi"); if (isset($_POST['is_confirmed']) and $_POST['is_confirmed'] == "yes") { if((isset($_POST['maj']))&&($_POST['maj']=='check_jec_jep_point')) { $texte_info_action="$nb_pb_cpe erreur(s) nettoyée(s) dans la table 'j_eleves_cpe'.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } else{ $texte_info_action="Erreur lors du nettoyage de la table 'j_eleves_cpe'.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } } // Problème de suppression de l'association eleve/cpe après suppression d'un élève de toutes les périodes... (plus dans aucune classe) $sql="SELECT jecpe.e_login FROM j_eleves_cpe jecpe LEFT JOIN j_eleves_classes jec ON jecpe.e_login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe>0){ $texte_info_action="Suppression d'associations CPE/Elève pour un ou des élèves qui ne sont affectés dans aucune classe : "; $cpt_ele_cpe=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_cpe>0){$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->e_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->e_login; } //echo "\n"; $sql="DELETE FROM j_eleves_cpe WHERE e_login='$lig->e_login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve; } else{ $texte_info_action.="$eleve\n"; } $cpt_ele_cpe++; } $texte_info_action.=".
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations élèves/cpe pour des comptes non cpe $sql="SELECT * FROM j_eleves_cpe jec WHERE cpe_login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='cpe');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe>0){ $texte_info_action="Suppression d'associations CPE/Elève pour un ou des élèves associés à un compte qui n'est pas ou plus CPE : "; $cpt_ele_cpe=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_cpe>0) {$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->e_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->e_login; } //echo "\n"; $sql="SELECT u.nom,u.prenom FROM utilisateurs u WHERE login='$lig->cpe_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $cpe=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $cpe=$lig->cpe_login; } //echo "\n"; $sql="DELETE FROM j_eleves_cpe WHERE e_login='$lig->e_login' AND cpe_login='$lig->cpe_login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve."|".$cpe; } else{ $texte_info_action.="$eleve|$cpe\n"; } $cpt_ele_cpe++; } $texte_info_action.=".
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } $sql="SELECT * FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp>0){ $sql="DELETE FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action="$nb_pb_pp erreur(s) nettoyée(s) dans la table 'j_eleves_professeurs'.
\n"; } else{ $texte_info_action="Erreur lors du nettoyage de la table 'j_eleves_professeurs'.
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Problème de suppression de l'association eleve/professeur après suppression d'un élève de toutes les périodes... (plus dans aucune classe) $sql="SELECT jep.login FROM j_eleves_professeurs jep LEFT JOIN j_eleves_classes jec ON jep.login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp>0){ $texte_info_action="Suppression d'associations Professeur/Elève pour un ou des élèves qui ne sont affectés dans aucune classe: "; $cpt_ele_pp=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_pp>0){$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->login';"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->login; } $sql="DELETE FROM j_eleves_professeurs WHERE login='$lig->login';"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve; } else{ $texte_info_action.="$eleve\n"; } $cpt_ele_pp++; } $texte_info_action.=".
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations classes/scol pour des comptes non scolarité $sql="SELECT DISTINCT login FROM j_scol_classes jsc WHERE login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='scolarite');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol>0){ $texte_info_action="Suppression d'associations Scolarité/Classe pour un ou des comptes qui ne sont pas ou plus Scolarité : "; $cpt_scol=0; while($lig=mysqli_fetch_object($test)){ if($cpt_scol>0) {$texte_info_action.=", ";} $sql="SELECT u.nom,u.prenom FROM utilisateurs u WHERE login='$lig->login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $scol=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $scol=$lig->login; } $sql="DELETE FROM j_scol_classes WHERE login='$lig->login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$scol; } else{ $texte_info_action.="$scol\n"; } $cpt_scol++; } $texte_info_action.=".
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations classes/scol pour des classes qui n'existent pas ou plus $sql="SELECT DISTINCT id_classe FROM j_scol_classes jsc WHERE id_classe NOT IN (SELECT id FROM classes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol>0){ $texte_info_action="Suppression d'associations Scolarité/Classe pour des classes qui n'existent pas ou plus : "; $sql="DELETE FROM j_scol_classes WHERE id_classe NOT IN (SELECT id FROM classes);"; $delete=mysqli_query($GLOBALS["mysqli"], $sql); if($delete) { $texte_info_action.="$nb_pb_scol association(s) supprimée(s)\n"; } else { $texte_info_action.="echec de la suppression de $nb_pb_scol association(s)\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } if($texte_info_action=="") { $texte_info_action.="
Aucune erreur n'a été trouvée.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } //===================================== echo "\n"; echo script_suite_submit(); //===================================== } else { echo "La procédure suivante vérifie la présence d'enregistrements aberrants dans les tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes'.
\n"; flush(); $temoin_pb="n"; $sql="SELECT * FROM j_eleves_cpe WHERE cpe_login='' OR e_login='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe==0){ echo "Aucun enregistrement dans la table 'j_eleves_cpe' n'a de login élève ou de login CPE vide.
\n"; } elseif($nb_pb_cpe==1){ echo "$nb_pb_cpe enregistrement dans la table 'j_eleves_cpe' a un login élève ou un login CPE vide.
Cet enregistrement peut perturber la désignation de CPE responsable.
Vous devrier le supprimer.
$nb_pb_cpe enregistrements dans la table 'j_eleves_cpe' ont un login élève ou un login CPE vide.
\n";
echo "Ces enregistrements peuvent perturber la désignation de CPE responsable.
\n";
echo "Vous devrier les supprimer.
Aucun enregistrement dans la table 'j_eleves_cpe' n'associe un élève non scolarisé à un CPE.
\n"; } elseif($nb_pb_cpe==1){ echo "$nb_pb_cpe enregistrement dans la table 'j_eleves_cpe' associe un élève non scolarisé à un CPE.
Cet enregistrement peut perturber la désignation de CPE responsable.
Vous devrier le supprimer.
$nb_pb_cpe enregistrements dans la table 'j_eleves_cpe' associent des élèves non scolarisés à un ou des CPE.
\n";
echo "Ces enregistrements peuvent perturber la désignation de CPE responsable.
\n";
echo "Vous devrier les supprimer.
Aucun enregistrement dans la table 'j_eleves_cpe' n'est associé à un compte non CPE.
\n"; } else { echo "$nb_pb_cpe enregistrements de la table 'j_eleves_cpe' correspond(ent) des comptes non CPE.
\n"; $temoin_pb="y"; } $sql="SELECT * FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp==0){ echo "Aucun enregistrement dans la table 'j_eleves_professeurs' n'a de login élève ou de login $gepi_prof_suivi vide.
\n"; } elseif($nb_pb_pp==1){ echo "$nb_pb_pp enregistrement dans la table 'j_eleves_professeurs' a un login élève ou un login $gepi_prof_suivi vide.
\n";
echo "Cet enregistrement peut perturber la désignation de $gepi_prof_suivi.
\n";
echo "Vous devrier le supprimer.
$nb_pb_pp enregistrements dans la table 'j_eleves_professeurs' ont un login élève ou un login $gepi_prof_suivi vide.
\n";
echo "Ces enregistrements peuvent perturber la désignation de $gepi_prof_suivi.
\n";
echo "Vous devrier les supprimer.
Aucun enregistrement dans la table 'j_eleves_professeurs' n'associe un élève non scolarisé à un $gepi_prof_suivi.
\n"; } elseif($nb_pb_pp==1){ echo "$nb_pb_pp enregistrement dans la table 'j_eleves_professeurs' associe un élève non scolarisé à un $gepi_prof_suivi.
Cet enregistrement peut perturber la désignation de $gepi_prof_suivi.
Vous devrier le supprimer.
$nb_pb_pp enregistrements dans la table 'j_eleves_professeurs' associent des élèves non scolarisés à un ou des $gepi_prof_suivi.
\n";
echo "Ces enregistrements peuvent perturber la désignation de $gepi_prof_suivi.
\n";
echo "Vous devrier les supprimer.
Aucun enregistrement dans la table 'j_scol_classes' n'est associé à un compte non scolarité.
\n"; } else { echo "$nb_pb_scol enregistrements de la table 'j_scol_classes' correspond(ent) des comptes non scolarité.
\n"; $temoin_pb="y"; } $sql="SELECT DISTINCT id_classe FROM j_scol_classes jsc WHERE id_classe NOT IN (SELECT id FROM classes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol==0){ echo "Aucun enregistrement dans la table 'j_scol_classes' n'est associé à des classes qui n'existent pas ou plus.
\n"; } else { echo "$nb_pb_scol enregistrements de la table 'j_scol_classes' correspond(ent) des classes qui n'existent pas ou plus.
\n"; $temoin_pb="y"; } if($temoin_pb=="y"){ echo "Des erreurs ont été relevées.
\n"; echo "Si vous voulez effectuer le nettoyage, cliquez sur le bouton ci-dessous.
Vous devriez contrôler par la suite si toutes vos associations CPE/élève et $gepi_prof_suivi/élève sont bien renseignées.
Aucune erreur n'a été relevée.
\n"; } } } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_edt') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage des tables EDT : \n";
$tab_table=array('edt_classes', 'edt_cours', 'edt_calendrier');
for($i=0;$i
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
}
echo "
Terminé.
\n"; } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_absences') { echo ""; if(isset($_GET['chgt_annee'])) { echo " Retour à la page de Changement d'année "; } else { echo " Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "
\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { $tmp_tab=explode("/",$date_limite); $jour=$tmp_tab[0]; $mois=$tmp_tab[1]; $annee=$tmp_tab[2]; if(!checkdate($mois,$jour,$annee)) { echo "La date saisie $date_limite n'est pas valide.
\n"; unset($date_limite); require("../lib/footer.inc.php"); die(); } } if(!isset($date_limite)) { echo "Abandon : Aucune date limite n'a été saisie.
\n"; } else { echo "Nettoyage des tables absences : \n";
/*
$tab_table=array('absences_rb', 'absences_repas', 'absences_eleves');
for($i=0;$i
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "absences_eleves (abs1)";
$sql="DELETE FROM absences_eleves WHERE a_date_absence_eleve < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "absences_repas (abs1)";
$sql="DELETE FROM absences_repas WHERE a_date_absence_eleve < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "lettres_suivis (abs1)";
$sql="DELETE FROM lettres_suivis WHERE emis_date_lettre_suivi < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "a_agregation_decompte (abs2)";
$sql="DELETE FROM a_agregation_decompte WHERE debut_abs < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "a_notifications (abs2)";
$sql="DELETE FROM a_notifications WHERE created_at < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo "a_saisies (abs2)";
$sql="DELETE FROM a_saisies WHERE debut_abs < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "a_saisies_version (abs2)";
$sql="DELETE FROM a_saisies_version WHERE debut_abs < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "a_traitements (abs2)";
$sql="DELETE FROM a_traitements WHERE created_at < date('$annee-$mois-$jour');";
//echo "$sql
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
echo ", ";
echo "
Terminé.
\n"; } } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_table_log') { echo ""; if(isset($_GET['chgt_annee'])) { echo " Retour à la page de Changement d'année "; } else { echo " Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "
\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { echo "Nettoyage des logs antérieurs au $date_limite : ".clean_table_log($date_limite)."
\n"; echo "Terminé.
\n"; } } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_table_tentative_intrusion') { echo ""; if(isset($_GET['chgt_annee'])) { echo " Retour à la page de Changement d'année "; } else { echo " Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "
\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { echo "Nettoyage des logs de tentatives d'intrusion antérieurs au $date_limite : ".clean_table_tentative_intrusion($date_limite)."
\n"; echo "Terminé.
\n"; } } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_cdt') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage des tables du module Cahier de textes : \n";
$tab_table=array("ct_devoirs_entry",
"ct_documents",
"ct_entry",
"ct_devoirs_documents",
"ct_private_entry",
"ct_sequences");
for($i=0;$i
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
}
echo "
Terminé.
\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_temp_tables') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage des tables temporaires : \n"; echo clean_temp_tables(); echo "
\n"; echo "Terminé.
\n"; } elseif((isset($_POST['action']) AND $_POST['action'] == 'verif_interclassements')||(isset($_POST['maj']) AND $_POST['maj'] == 'verif_interclassements')||(isset($_GET['maj']) AND $_GET['maj'] == 'verif_interclassements')) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; if((isset($_POST['maj']))&&($_POST['maj']=='verif_interclassements')) { $texte_info_action="Aucune table n'a été trouvée???
\n"; } else { $texte_info_action=""; $tab_collations=array(); $texte_info_action.="Table | "; $texte_info_action.="Champ | "; $texte_info_action.="Type | "; $texte_info_action.="Interclassement | "; $texte_info_action.="
---|---|---|---|
0) { $texte_info_action.=" rowspan='$nb_champs'"; } $texte_info_action.=">$tab[0] | "; $cpt=0; while($lig_champ=mysqli_fetch_object($res_champs)) { if($cpt>0) { $alt2=$alt2*(-1); $texte_info_action.="|||
$lig_champ->Field | "; $texte_info_action.="$lig_champ->Type | "; $texte_info_action.="";
/*
$sql="SELECT DISTINCT collation($lig->Field) as c FROM $tab[0];";
$res_collation=mysql_query($sql);
if(mysql_num_rows($res_collation)==0) {
$texte_info_action.="Table vide... détection de l'interclassement impossible";
}
else {
while($lig_collation=mysql_fetch_object($res_champs)) {
$texte_info_action.=$lig_collation->c." ";
}
}
*/
//if($lig_champ->Collation!='utf8_general_ci' && $lig_champ->Collation!=NULL) {
if($lig_champ->Collation!='utf8_general_ci') {
$texte_info_action.="".$lig_champ->Collation."";
$texte_info_action.=" Corriger"; } else { $texte_info_action.=$lig_champ->Collation; } //if(!in_array($lig_champ->Collation,$tab_collations) && $lig_champ->Collation!=NULL) {$tab_collations[]=$lig_champ->Collation;} if(!in_array($lig_champ->Collation,$tab_collations)) {$tab_collations[]=$lig_champ->Collation;} $texte_info_action.=" | ";
$texte_info_action.="Aucun champ | "; $texte_info_action.="Aucun champ VARCHAR ni CHAR | "; $texte_info_action.=""; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); flush(); } $texte_info_action="
Un seul interclassement a été trouvé dans vos tables.
Il n'y a pas de problème d'interclassement/collation.
$nb_collations interclassements ont été trouvés dans vos tables.
Cela peut représenter un problème si deux interclassements différents sont utilisés sur une jointure de tables.
En cas de doute, signalez sur la liste de diffusion gepi-users les interclassements relevés (en indiquant sur quels champs cela se produit).
Voici la liste des interclassements trouvés : ";
for($loop=0;$loop
Terminé.
"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "\n"; echo script_suite_submit(); //===================================== } elseif((isset($_POST['action']) AND $_POST['action'] == 'corriger_interclassements')||(isset($_GET['maj']) AND $_GET['maj'] == 'corriger_interclassements')) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Correction des interclassements (collations) :
\n"; if((isset($_GET['table']))&&(preg_match("/^[A-Za-z0-9_]*$/",$_GET['table']))) { echo "Correction de la table ".$_GET['table']." : "; $sql="ALTER TABLE `".$_GET['table']."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { echo "Erreur ".mysqli_error($GLOBALS["mysqli"])."Aucune erreur de collation n'a été trouvée.
\n"; } } } elseif ((isset($_POST['action']) AND $_POST['action'] == 'corrige_ordre_matieres_professeurs')||(isset($_POST['maj']) AND $_POST['maj'] == 'corrige_ordre_matieres_professeurs')||(isset($_GET['maj']) AND $_GET['maj'] == 'corrige_ordre_matieres_professeurs')) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; if((isset($_POST['maj']))&&($_POST['maj']=='corrige_ordre_matieres_professeurs')) { $texte_info_action="Correction de l'ordre de matières des professeurs : \n"; $texte_info_action.="
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $sql="SELECT * FROM j_professeurs_matieres ORDER BY id_professeur, ordre_matieres, id_matiere;"; //echo "$sqlAucune association professeur/matière n'est enregistrée dans la table 'j_professeurs_matieres'.
\n"; } else { $texte_info_action=""; $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { if($lig->id_professeur!=$prof_precedent) { $prof_precedent=$lig->id_professeur; $tab_matiere=array(); $tab_ordre_matieres=array(); $cpt=1; } if(in_array($lig->ordre_matieres,$tab_ordre_matieres)) { $texte_info_action.="Rang $lig->ordre_matieres de matière en doublon pour $lig->id_professeur ($lig->id_matiere)$nb_corrections correction(s) effectuée(s) avec $nb_erreurs erreur(s).
"; $texte_info_action.="Terminé.
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "\n"; echo script_suite_submit(); //===================================== } elseif ((isset($_POST['action']) AND $_POST['action'] == 'controle_categories_matieres')||(isset($_POST['maj']) AND $_POST['maj'] == 'controle_categories_matieres')||(isset($_GET['maj']) AND $_GET['maj'] == 'controle_categories_matieres')) { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; if((isset($_POST['maj']))&&($_POST['maj']=='controle_categories_matieres')) { $texte_info_action="Contrôle des catégories de matières : \n"; $texte_info_action.="
\n"; $sql="SELECT id, classe FROM classes ORDER BY classe;"; //echo "$sqlAucune classe n'est enregistrée dans la table 'classes'.
\n"; } else { $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { // categorie_id=='0' pour la "catégorie" Aucune... non présente dans matieres_categories $sql="SELECT DISTINCT categorie_id, id_classe FROM j_groupes_classes jgc WHERE id_classe='$lig->id' and categorie_id!='0' AND categorie_id not in (select categorie_id from j_matieres_categories_classes where classe_id='$lig->id');"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)>0) { while($lig2=mysqli_fetch_object($res2)) { $sql="SELECT id, nom_court, nom_complet, priority FROM matieres_categories WHERE id='$lig2->categorie_id'"; $res_cat=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_cat)==0) { $texte_info_action.="La catégorie n°$lig2->categorie_id associée à la classe n°$lig->id ($lig->classe) n'existe pas dans la table 'matieres_categories'.Anomalie : Une catégorie de matière '$lig_cat->nom_court' ('$lig_cat->nom_complet') a l'identifiant 0 dans la table 'matieres_categories'.
Cet identifiant est réservé à la \"catégorie\" Aucune qui sert pour les matières ne devant être dans aucune catégorie (une astuce qui permet de ne pas faire apparaitre certains enseignements sur les bulletins (demi-groupes de TP par exemple)).
Suppression de cette catégorie : "; $sql="DELETE FROM matieres_categories WHERE id='0';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Succès";} else {echo "Echec";} $texte_info_action.="
"; } $texte_info_action.="$nb_corrections correction(s) effectuée(s) avec $nb_erreurs erreur(s).
"; $texte_info_action.="Terminé.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // A VOIR: Faut-il mettre un correctif /* Rechercher les classes pour lesquelles les catégories sont demandées, mais pour lesquelles la table j_matieres_categories_classes est vide. SELECT display_mat_cat FROM classes WHERE id='7'; Faire alors UPDATE classes SET display_mat_cat='n' WHERE id='XXX'; et alerter. // Les modifs précédentes corrigent ce pb. $texte_info_action.="Contrôle des classes avec affichage des catégories de matières demandé, mais sans aucun paramétrage défini dans j_matieres_categories_classes : \n";
$sql="SELECT id, classe FROM classes WHERE display_mat_cat='y' AND id NOT in (SELECT classe_id FROM j_matieres_categories_classes);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
while($lig_cat=mysqli_fetch_object($res)) {
$texte_info_action.="
Suppression de l'affichage des catégories (mal paramétré) pour la classe de $lig_cat->classe : \n";
$sql="UPDATE classes SET display_mat_cat='n' WHERE id='$lig_cat->id';";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {$texte_info_action.="Succès";} else {echo "Echec";}
}
}
else {
$texte_info_action.="Aucune anomalie trouvée";
}
$texte_info_action.="
Pensez à parcourir le compte-rendu de nettoyage en page d'accueil.
Il peut s'y trouver des messages et liens concernant des opérations encore à effectuer, mais requérant un choix de votre part (donc non effectuée automatiquement ici).
Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Vidage des tables du module Discipline : \n";
$tab_table=array(//"s_alerte_mail",
"s_avertissements",
"s_autres_sanctions",
"s_communication",
"s_exclusions",
"s_incidents",
"s_protagonistes",
"s_retenues",
"s_sanctions",
"s_traitement_incident",
"s_travail");
for($i=0;$i
\n";
$suppr=mysqli_query($GLOBALS["mysqli"], $sql);
}
echo "
Recherche et suppression des documents (travaux, punitions,...) joints aux incidents et sanctions :
\n";
$dossier_documents_discipline="documents/discipline";
if(((isset($multisite))&&($multisite=='y'))||(getSettingValue('multisite')=='y')) {
if(isset($_COOKIE['RNE'])) {
$dossier_documents_discipline.="_".$_COOKIE['RNE'];
if(!file_exists("../$dossier_documents_discipline")) {
@mkdir("../$dossier_documents_discipline",0770);
}
}
}
$handle=opendir('../'.$dossier_documents_discipline);
$nb_suppr=0;
$nb_err=0;
while ($file = readdir($handle)) {
if (($file != '.') and ($file != '..') and ($file != 'remove.txt')
and ($file != '.htaccess') and ($file != '.htpasswd') and ($file != 'index.html') and ($file != '.test')
// Les tests précédents sont inutiles avec ce qui suit, mais les conserver permet de ne pas oublier des pièges en cas de modif
and(preg_match('/^incident_/', $file))) {
if(deltree('../'.$dossier_documents_discipline."/".$file, true)) {
$nb_suppr++;
}
else {
$nb_err++;
}
}
}
closedir($handle);
echo "$nb_suppr suppression(s) de dossiers d'incidents.
";
echo "$nb_err erreur(s) de suppression.";
echo "
Terminé.
\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'vidage_mod_discipline_date') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; $date_limite=isset($_POST['date_limite']) ? $_POST['date_limite'] : NULL; if((!isset($date_limite))||($date_limite=="")) { echo "Suppression d'incidents impossible&nbp;: date invalide.
"; } elseif(!preg_match("#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$#", $date_limite)) { echo "Suppression d'incidents impossible&nbp;: date '$date_limite' invalide.
"; } else { echo "Suppression des incidents, sanctions, avertissements pour une date antérieure à ".$date_limite." :
\n";
$mysql_date_limite=get_mysql_date_from_slash_date($date_limite, "n");
$mod_disc_terme_incident=getSettingValue('mod_disc_terme_incident');
if($mod_disc_terme_incident=="") {$mod_disc_terme_incident="incident";}
$mod_disc_terme_sanction=getSettingValue('mod_disc_terme_sanction');
if($mod_disc_terme_sanction=="") {$mod_disc_terme_sanction="sanction";}
$mod_disc_terme_avertissement_fin_periode=getSettingValue('mod_disc_terme_avertissement_fin_periode');
if($mod_disc_terme_avertissement_fin_periode=="") {$mod_disc_terme_avertissement_fin_periode="avertissement de fin de période";}
$sql="SELECT * FROM s_travail WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo mysqli_num_rows($res)." travaux à faire : ";
$sql="DELETE FROM s_travail WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimés
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT * FROM s_retenues WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo mysqli_num_rows($res)." retenues : ";
$sql="DELETE FROM s_retenues WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimées
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT * FROM s_exclusions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo mysqli_num_rows($res)." exclusions : ";
$sql="DELETE FROM s_exclusions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimées
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT * FROM s_autres_sanctions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo mysqli_num_rows($res)." autres ".$mod_disc_terme_sanction."s : ";
$sql="DELETE FROM s_autres_sanctions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimées
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT * FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."');";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo "Soit en tout ".mysqli_num_rows($res)." ".$mod_disc_terme_sanction."s : ";
$sql="DELETE FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."');";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimées
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT * FROM s_incidents WHERE date<='".$mysql_date_limite."';";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo "Soit ".mysqli_num_rows($res)." ".$mod_disc_terme_incident."s : ";
$sql="DELETE FROM s_incidents WHERE date<='".$mysql_date_limite."';";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimés
";
}
else {
echo " erreur lors de la suppression
";
}
}
$sql="SELECT 1=1 FROM s_avertissements WHERE date_avertissement<='".$mysql_date_limite." 00:00:00';";
//echo "$sql
\n";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
echo mysqli_num_rows($res)." ".$mod_disc_terme_avertissement_fin_periode."s : ";
$sql="DELETE FROM s_avertissements WHERE date_avertissement<='".$mysql_date_limite." 00:00:00';";
//echo "$sql
\n";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo " supprimés
";
}
else {
echo " erreur lors de la suppression
";
}
}
echo "
Terminé.
\n"; } } elseif (isset($_POST['action']) AND $_POST['action'] == 'nettoyage_mod_discipline') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage des tables du module Discipline :
\n";
$cpt_nettoyage=0;
//insert into s_traitement_incident set login_ele='titi', id_incident='4';
$sql="select * from s_traitement_incident str where str.login_ele not in (select login from s_protagonistes spr where spr.id_incident=str.id_incident);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." protagonistes dans un traitement d'incident ne correspondent à aucun protagoniste d'incident : ";
$nb_err=0;
$nb_suppr=0;
while($lig_tmp=mysqli_fetch_object($test)) {
$sql="delete from s_traitement_incident where id_incident='$lig_tmp->id_incident' and login_ele='$lig_tmp->login_ele';";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {$nb_suppr++;} else {$nb_err++;}
}
if($nb_err==0) {
echo "nettoyés";
$cpt_nettoyage+=mysqli_num_rows($test);
}
else {
echo "$nb_suppr nettoyés, $nb_err erreur lors du nettoyage";
}
echo "
\n";
}
//insert into s_sanctions set login='toto', id_incident='4';
$sql="select * from s_sanctions san where san.login not in (select login from s_protagonistes spr where spr.id_incident=san.id_incident);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." protagonistes dans une sanction ne correspondent à aucun protagoniste d'incident : ";
$nb_err=0;
$nb_suppr=0;
while($lig_tmp=mysqli_fetch_object($test)) {
$sql="delete from s_sanctions where id_incident='$lig_tmp->id_incident' and login='$lig_tmp->login';";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {$nb_suppr++;} else {$nb_err++;}
}
if($nb_err==0) {
echo "nettoyés";
$cpt_nettoyage+=mysqli_num_rows($test);
}
else {
echo "$nb_suppr nettoyés, $nb_err erreur lors du nettoyage";
}
echo "
\n";
}
$sql="select * from s_traitement_incident where id_incident not in (select id_incident from s_incidents);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." traitements ne correspondent à aucun incident : ";
$sql="delete from s_traitement_incident where id_incident not in (select id_incident from s_incidents);";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo "nettoyés";
$cpt_nettoyage+=mysqli_num_rows($test);
}
else {
echo "erreur lors du nettoyage";
}
echo "
\n";
}
$sql="select * from s_protagonistes where id_incident not in (select id_incident from s_incidents);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." protagonistes ne correspondent à aucun incident : ";
$sql="delete from s_protagonistes where id_incident not in (select id_incident from s_incidents);";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo "nettoyés";
$cpt_nettoyage+=mysqli_num_rows($test);
}
else {
echo "erreur lors du nettoyage";
}
echo "
\n";
}
$sql="select * from s_sanctions where id_incident not in (select id_incident from s_incidents);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." sanctions ne correspondent à aucun incident : ";
$sql="delete from s_sanctions where id_incident not in (select id_incident from s_incidents);";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
echo "nettoyés";
$cpt_nettoyage+=mysqli_num_rows($test);
}
else {
echo "erreur lors du nettoyage";
}
echo "
\n";
}
$tab_sanction=array("s_exclusions","s_retenues","s_travail","s_autres_sanctions");
$tab_txt_sanction=array("exclusions","retenues","travaux","autres sanctions");
for($loop=0;$loop
\n";
}
}
if($cpt_nettoyage==0) {echo "Aucune scorie n'a été trouvée.";}
echo "
Terminé.
\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'nettoyage_cdt') { echo "Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "
\n"; echo "Nettoyage des tables du cahier de textes :
\n";
if(!isset($_POST['confirmer_nettoyage_cdt'])) {
$cpt_scories=0;
$sql="select * from ct_entry where id_groupe not in (select id FROM groupes);";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo mysqli_num_rows($test)." compte-rendu(s) de séance(s) pour un ou des groupes n'existant plus a(ont) été trouvé(s).
\n";
echo "
Date | \n"; echo "Professeur | \n"; echo "Contenu | \n"; echo "
---|---|---|
".strftime("%d/%m/%Y", $lig->date_ct)." | \n"; echo "".civ_nom_prenom($lig->id_login)." | \n"; echo "".$lig->contenu." | \n"; echo "
Date | \n"; echo "Professeur | \n"; echo "Contenu | \n"; echo "
---|---|---|
".strftime("%d/%m/%Y", $lig->date_ct)." | \n"; echo "".civ_nom_prenom($lig->id_login)." | \n"; echo "".$lig->contenu." | \n"; echo "
Date | \n"; echo "Professeur | \n"; echo "Contenu | \n"; echo "
---|---|---|
".strftime("%d/%m/%Y", $lig->date_ct)." | \n"; echo "".civ_nom_prenom($lig->id_login)." | \n"; echo "".$lig->contenu." | \n"; echo "
Terminé.
\n"; } else { echo "Retour accueil "; //echo "| Retour page Vérification / Nettoyage des tables
\n"; echo "\n"; echo "Il est très vivement conseillé de faire une sauvegarde de la base MySql avant de lancer la procédure.
\n"; echo "Il est également vivement conseillé de désactiver les connexions à GEPI durant la phase de nettoyage.
Attention : selon la taille de la base, cette opération peut durer plusieurs heures.
\n"; echo "Contrôler les paramétrages aberrants pour un format A4 ou un un format A3
"; if(isset($_GET['check_param_bloc_adresse_html'])) { if($_GET['check_param_bloc_adresse_html']=='a4') { echo "Contrôle des paramètres pour la version A4 :
"; $retour_check=check_param_bloc_adresse_html('a4'); } else { echo "Contrôle des paramètres pour la version A3 :
"; $retour_check=check_param_bloc_adresse_html('a3'); } if($retour_check=='') { echo ""; echo "Pas de valeur aberrante trouvée."; } else { echo "
"; echo "".$retour_check; } echo "
"; } echo "NOTE : Le bloc adresse des responsables d'un élève est positionné dans les bulletins HTML et Fiches Bienvenue avec les mêmes paramètres.
Ils sont définis dans la page Paramètres d'impression des bulletins
Cette procédure opère un nettoyage des lignes inutiles dans les tables de liaison de la base MySql de GEPI et dans les tables des données scolaires des élèves (notes, appréciations, absences).";
echo "
Les tables de liaison contiennent des informations qui mettent en relation les tables principales de GEPI
(élèves, professeurs, matières, classes).
Du fait de bugs mineurs (éventuellement déjà réglés mais présents dans des versions antérieures de GEPI) ou de mauvaises manipulations,
ces tables de liaison peuvent contenir des données obsolètes ou des doublons qui peuvent nuire à un fonctionnement optimal de GEPI.";
echo "
Ou n'effectuer que certains des nettoyages de la liste :
\n";
echo "Tables AID, j_eleves_etablissements, j_eleves_regime et j_professeurs_matieres
\n";
echo "Table j_eleves_professeurs (associations élèves/".getSettingValue('gepi_prof_suivi').")
\n";
echo "Table j_eleves_classes (inscription des élèves dans les classes pour chaque période)
\n";
echo "Tables aid_appreciations et avis_conseil_classe
\n";
echo "Table matieres_appreciations (appréciations des élèves sur les bulletins)
\n";
echo "Table matieres_notes (notes des élèves sur les bulletins)
\n";
echo "Tables concernant les groupes (associations élèves/enseignements/périodes/classes)
\n";
echo "Tables concernant les comptes élèves et responsables
\n";
echo "Tables concernant les grilles PDF.
\n";
echo "Supprimer les adresses responsables non associées
\n";
echo "Supprimer les engagements incohérents (élèves partis, ou association avec une classe dans laquelle l'élève n'est pas/plus inscrit)
\n";
echo "Supprimer les scories de Dates événements classes attachés à des classes qui n'existent plus
\n";
echo "Contrôle des tables j_eleves_cpe, j_eleves_professeurs et j_scol_classes.
\n";
echo "Vérification des interclassements (collation,...).
\n";
echo "Vérification de l'ordre des matières pour les professeurs.
\n";
echo "Vérification des catégories de matières.
\n";
//echo "A DETAILLER...";
echo "
Il est arrivé que des élèves puissent être inscrits à des groupes sur des périodes où ils ne sont plus dans la classe (suite à des changements de classes, départs,... par exemple).
Il en résulte des affichages d'erreur non fatales, mais disgracieuses.
Le problème n'est normalement plus susceptible de revenir, mais dans le cas où vous auriez des erreurs inexpliquées concernant /lib/groupes.inc.php, vous pouvez contrôler les appartenances aux groupes/classes en visitant la page suivante:
Contrôler les appartenances d'élèves à des groupes/classes.
\n"; echo "\n"; //=================================================== // Anomalies sso_table_correspondance: // Il y a un index sur login_gepi, mais pas sur login_sso $sql="SELECT DISTINCT login_sso FROM sso_table_correspondance WHERE login_gepi!='' AND login_sso!='' AND login_gepi IN (SELECT login FROM utilisateurs) GROUP BY login_sso HAVING COUNT(login_sso)>'1';"; $res=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($res); if($nb_scories>0) { echo "Jusqu'à la version 1.4.3-1, GEPI a comporté un bug sur le calcul des moyennes de conteneurs (boites/sous-matières).
\nSi on déplaçait un devoir ou un conteneur vers un autre conteneur, il pouvait se produire une absence de recalcul des moyennes de certains conteneurs.
\nLe problème est désormais corrigé, mais dans le cas où vos moyennes ne sembleraient pas correctes, vous pouvez provoquer le recalcul des moyennes de l'ensemble des conteneurs pour l'ensemble des groupes/matières.
\nLes modifications effectuées seront affichées.
Jusqu'à la version 1.4.3-1, GEPI a comporté un bug sur le calcul des moyennes de conteneurs (".getSettingValue("gepi_denom_boite")."s).
\nSi on déplaçait un devoir ou un conteneur vers un autre conteneur, il pouvait se produire une absence de recalcul des moyennes de certains conteneurs.
\nLe problème est désormais corrigé, mais dans le cas où vos moyennes ne sembleraient pas correctes, vous pouvez provoquer le recalcul des moyennes de l'ensemble des conteneurs pour l'ensemble des groupes/matières.
\nLes modifications effectuées seront affichées.
La procédure de sauvegarde avec la commande 'mysqldump' dans la version 1.4.4-stable contenait un bug aboutissant à la perte de la fonction auto_increment sur certains champs, ce qui peut aboutir très rapidement à des incohérences dans la base de données.
\n"; echo "Si vous avez restauré une sauvegarde générée avec la méthode mysqldump, vous devez absolument lancer cette vérification le plus rapidement possible et corriger les erreurs si le script ne peut les corriger automatiquement.
\n"; echo "Il est vivement recommandé de faire une sauvegarde de la base avant d'effectuer cette opération !
\n"; echo "\n"; echo "Gepi a un temps contenu un bug sur le format des login.
La présence de 'point' dans un nom de login par exemple pouvait provoquer des dysfonctionnements.
Le contenu des tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes' pouvait être affecté.
Il est vivement recommandé de faire une sauvegarde de la base avant d'effectuer cette opération !
\n"; echo "\n"; echo "Vérification de l'Emploi du temps.
\n"; echo "Pour vérifier votre emploi du temps en cas d'anomalies, suivez ce lien : Vérification de l'Emploi du temps\n"; echo "Contrôle de l'interclassement (COLLATION) des champs des tables.
Des interclassements différents sur des champs de deux tables intervenant dans une jointure peut provoquer des erreurs.
Un tel problème peut survenir avec des bases transférées d'une machine à une autre,...
Correction des interclassements (COLLATION) des champs des tables.
Si des anomalies ont été relevées lors d'un contrôle des interclassements, vous pouvez effectuer une correction :
Elle consistera à forcer l'interclassement 'utf8_general_ci' sur les tables Gepi.
Contrôle des ordres de matières pour les professeurs.
Si les ordres de matières ne sont pas correctement renseignés dans la table j_professeurs_matieres (ordre_matieres tous à zéro par exemple), il n'est pas possible de choisir la matière principale d'un professeur.
Contrôle catégories de matières.
Si les vous n'obtenez aucune matière dans les relevés de notes quand les Catégories de matières sont cochées dans 'Gestion des bases/Gestion des classes/<Une_classe> Paramètres', les informations de la table 'j_matieres_categories_classes' sont probablement incomplètes.
Nettoyage de scories dans le module Discipline.
\n"; echo "\n"; echo "Nettoyage de scories dans les cahiers de textes.
\n"; echo "\n"; echo "Au changement d'année, il est recommandé de vider les entrées des tables 'edt_classes', 'edt_cours', 'edt_calendrier' du module emploi du temps de Gepi.
\n"; echo "\n"; echo "Au changement d'année, il est recommandé de vider les entrées des tables 'absences_rb', 'absences_repas' et 'absences_eleves' du module abs1 de Gepi, ainsi que les tables a_agregation_decompte, a_notifications, a_saisies, a_saisies_version, a_traitements du module abs2 :
\n"; echo "\n"; echo "Au changement d'année, il est recommandé de vider les entrées des tables du module Discipline de Gepi.
\n"; echo "\n"; echo "Dans le cas où des incidents, sanctions, avertissements n'auraient pas été supprimés au changement d'année, vous pouvez en effectuer la suppression pour tout ce qui est antérieur à une date choisie.
\n"; echo "\n"; echo "Au changement d'année, il faut archiver les Cahiers de Textes, puis le vider.
\n"; echo "\n"; echo "Vider les tables temporaires utilisées lors de l'initialisation de l'année, lors de l'archivage des cahiers de textes en fin d'année, lors de l'import des absences depuis un XML de Sconet,...
Ces tables peuvent prendre inutilement de la place lorsque vous faites une sauvegarde.
En revanche, évitez de les vider lorsqu'une opération d'initialisation, archive, import,... est en cours (vous perturberiez cette opération).